#include <linux/kthread.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/kernel.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
#define BUF_SIZE 20
static struct task_struct *myThread = NULL; // 内核线程的任务结构体
// 内核线程的执行函数
static int print(void *data)
{
    while (!kthread_should_stop())
    {
        printk(KERN_ALERT "New kthread is running.\n"); // 打印线程信息
        msleep(2000);                                   // 线程每2秒打印一次
    }
    return 0; // 线程退出
}
// 模块初始化函数
static int __init kthread_init(void)
{
    printk(KERN_ALERT "Create kernel thread!\n");

    // 使用 kthread_run 创建并启动内核线程
    myThread = kthread_run(print, NULL, "my_kthread");
    if (IS_ERR(myThread))
    {
        printk(KERN_ALERT "Failed to create kernel thread\n");
        return PTR_ERR(myThread); // 如果线程创建失败，返回错误
    }
    return 0; // 模块初始化成功
}
// 模块退出函数
static void __exit kthread_exit(void)
{
    printk(KERN_ALERT "Kill new kthread.\n");
    // 如果线程已创建，停止线程
    if (myThread)
    {
        kthread_stop(myThread);
    }
}
module_init(kthread_init); // 初始化时加载 kthread_init
module_exit(kthread_exit); // 卸载时调用 kthread_exit
